package report.com.fengbo.core.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;



/**
 * 各种时间操作方法 定义各种时间格式化输入，输出
 * @author fengbo
 * @version1.0
 * 
 */
public class TimeUtil {

	/**
	 * @author fengbo
	 * 
	 * @return 将当前时间格式化为yyyy-MM-dd HH:mm:ss
	 */
	public static String getStandardTime(){
	
		java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date dt = new Date();
		
		String date = format.format(dt);
		return date;
	}

	/**
	 * @author fengbo
	 * 
	 * @return 将当前时间格式化为yyyy-MM-dd
	 */
	public static String getYMDTime(){
	
		java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");
		Date dt = new Date();
		
		String date = format.format(dt);
		return date;
	}
	/**
	 * @author fengbo
	 * 
	 * @return 将当前字符串yyyy-MM-dd HH:mm:ss:转化为日期格式
	 */
	public static Date getyMdHms(String time) {
		 Date date = null;
		try {
			 DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
		
			date = df.parse(time);
			
		} catch (ParseException e) {
			return date;
		}
		return date;
	}
	/**
	 * @author fengbo
	 * 
	 * @return 将当前字符串yyyy-MM-dd转化为日期格式
	 */
	public static Date getDate(String time) {
		if(null==time||"".equals(time)||"null".equals(time)){
			return null;
		}
		 DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
		 Date date = null;
		try {
			date = df.parse(time);
			
		} catch (Exception e) {
			return null;
		}
		return date;
	}
	/**
	 * @author fengbo
	 * 
	 * @return 将日期转化为yyyy-MM-dd类型的字符串
	 */
	public static String getYMDTime(Date date){
		if(null==date){
			return "";
		}
		try{
		java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");
		return format.format(date);
		}catch(Exception e){
			return "";
		}
	}
	/**
	 * @author fengbo
	 * 
	 * @return 将日期转化为yyyy-MM-dd HH:mm:ss类型的字符串
	 */
	public static String getYMDHMSTime(Date date){
		if(null==date){
			return null;
		}
		try{
		java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return format.format(date);
		}catch(Exception e){
			return null;
		}
	}
	
	/**
	 * @author fengbo
	 * j将时间"2008-09-04 00:00:00:0" 转换为 "2008-09-04"
	 * @param strDate
	 * @return
	 */
	public static String getYMDByStrTime(String strDate){
		
		return getYMDTime(getDate(strDate));
	}
	/**
	 * @author fengbo
	 * j将时间"2008-09-04 00:00:00:0" 转换为 "2008-09-04 00:00:00"
	 * @param strDate
	 * @return
	 */
	public static String getYMDHMSByTime(String strDate){
		if(null==strDate||"".equals(strDate)){
			return strDate;
		}
		try{
			strDate = strDate.substring(0,19);
		}catch(Exception e){
			return strDate;
		}
		return strDate;
	}

	/**
	 * @author zhangmiao
	 * 
	 * @return 将日期转化为yyyy年MM月dd日类型的字符串
	 */
	public static String getChYMDTime(Date date){
		try{
		java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy年MM月dd日");
		return format.format(date);
		}catch(Exception e){
			return "";
		}
	}
	 /**
     * 获得当前时间的 时、分、秒
     * @return
     */
    public static String getHMSTime(){
    	
		java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("HH:mm:ss");
		Date dt = new Date();
		
		String date = format.format(dt);
		return date;
	}
	/**
	 * @author zhangmiao
	 * j将时间"2008-09-04 00:00:00:0" 转换为 "2008年09月04日"
	 * @param strDate
	 * @return
	 */
    public static String getChYMDByStrTime(String strDate){
		
		return getChYMDTime(getDate(strDate));
	}
    
    /**
	 * @author zhangmiao
	 * 
	 * @return 将当前时间格式化为yyyy年MM月dd日
	 */
    public static String getChYMDTime(){
    	
		java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy年MM月dd日");
		Date dt = new Date();
		
		String date = format.format(dt);
		return date;
	}
    /**
     * 将时间类型转换为yyyy-MM-dd HH:mm
     * @param date
     * @return
     */
    public static Date getyMdHm(Date date){
    	if(date==null){
    		return date;
    	}
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
        Date result = null;
        try {
        	result = df.parse(df.format(date));
			
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return result;
	}
    /**
     * 截取字符串 获得时间格式 yyyy-MM-dd
     * @param str
     * @return
     */
   public static String getSandardTime(String str){
	   if(null==str||"".equals(str)){
		   return "";
	   }
	   try{
		   str = str.substring(0,10);
	   }catch(Exception e){
		   return "";
	   }
	   
	   return str;
   }
   /**
    * 获得sql中的Timestamp 
    * @param date
    * @return
    */
   public static java.sql.Time getTimeByDate(java.util.Date date){
	   if(null==date){return null;}
	   try{
		   return (java.sql.Time)date;
	   }catch(Exception e){
		   return null;
	   }
   }
   /**
    * 获得东八区时间
    * @return
    */
   public static Date getGMT8Time(){
		//获得东八区时间
		TimeZone.setDefault(TimeZone.getTimeZone("GMT+08:00"));
		Calendar c = new GregorianCalendar();
			////System.out.println(c.getTime());
		return c.getTime();
   }
   /**
    * 根据 时间的 秒数 获得时间对象
    * @param time
    * @return
    */
   public static Date getDataByTime(Long time){
	   if(null==time){return null;}
	   java.util.Date dt =new java.util.Date(time*1000);
	   return dt;
   }
   /**
    * 得到制定格式的date类返回的时间串
    * @param date
    * @param formatPattern
    * @return
    */
   public static String getDateByForamt( Date date ,String formatPattern ){
	   String resDate = null;
	   SimpleDateFormat sdf = new SimpleDateFormat(formatPattern);
	   resDate = sdf.format(date);
	   return resDate;
   }
   /**
    * 获得指定时间 之前 或 之后 一个时间段的时间(特定小时)
    * 若转换失败 返回 “”
    * @param date
    * @param beforOrAfter
    * @return
    */
   public static String getBeforOrAfterTime(Date date,String beforOrAfter){
	  if(null==date||null==beforOrAfter){return "";}
	   java.util.Date dt = TimeUtil.getGMT8Time();
	   try{
		  int hour =  Integer.parseInt(beforOrAfter);
		  dt.setHours(dt.getHours()+hour);
		  ////System.out.println(TimeUtil.getYMDHMSTime(dt));
		  return TimeUtil.getYMDHMSTime(dt);
	   }catch(Exception e){
		   
	   }
	   
	   return "";
   }
	public static void main(String [] args){
		//TimeUtil.getBeforOrAfterTime(new java.util.Date(), "-2");
		//System.out.println(86309+86256 +86377 +86400 +86400+86400);
		//计算 8-17 up 时间
		//System.out.println(63*60+42);
		System.out.println(TimeUtil.getYMDHMSTime(TimeUtil.getDataByTime(1285603200L)));
		System.out.println(TimeUtil.getYMDHMSTime(TimeUtil.getDataByTime(1285689600L)));
		
		System.out.println(1285689600L-1285603200L);
	}
}
